The invention relates to maintaining the integrity of data, and more particularly maintaining the integrity of data stored in a disk storage system.
In modern computer systems, data is continuously transferred between host processors and its peripheral storage, or terminals. Errors may be introduced during the reading, writing, or actual transmission of the data. Consequently, error control has become an integral part in the design of modern computing systems. The most commonly used methods for error detection involve the addition of one or more bits, called redundancy bits, the bits representing the actual data. These redundancy bits are not data; but are meta data used solely to determine the correctness of the data bits.
One popular technique for error detection is the Cyclic Redundancy Check (CRC). With this technique, all of the characters in a message block are treated as a serial string of bits representing a binary number. This number is then divided modulo 2 by a predetermined binary number and the remainder of this division is appended to the block of characters as a CRC character. The CRC character is compared with the check character obtained in similar fashion at the end. If they agree, the message is assumed to be correct. If they disagree, an error message may be sent or the receiving terminal or host may demand a retransmission.
Referring to FIG. 1, in a conventional prior art implementation using CRC, a system 10 includes an enterprise disk storage 12 connected to host computers (hereafter, hosts) 14a, 14b, 14c. The term “enterprise” as used here means that the disk storage is configured to allow multiple connectivity by, for example, hosts provided by different vendors. Disk storage system 12 may be, for example, one of a number of different Symmetrix systems, products of EMC Corporation, Hopkinton, Mass. Details concerning the architecture and operation of these systems are found, for example, in Symmetrix Product Manuals for Models 5500, 52XX, 5100, 3500, 32XX, and 3100) all of which are incorporated herein by reference.
Referring to FIG. 2, a representative unit of data, here a 4 Kbyte (4096 bytes) sector 30 of data is transmitted by, for example, host 14a, to disk storage 12. Each sector includes eight blocks of data, each 512 bytes long. Associated with sector 30 is a CRC result 34 calculated and stored by host 12 with a CRC algorithm. This CRC result 34 is generally stored separately from sector 30, for example, on another disk storage. In a normal read operation, the CRC algorithm is reapplied by host 14a, and the result is compared with the previously calculated and stored CRC result 34. If the results are not the same, an indication that an error has occurred is generally provided in the form of an error message.
The above described application of the CRC algorithm by host 14a, is relatively straightforward in the case that host 14a, requests reading sector 30 entirely. However, if host 14a, makes a request to read only a portion of sector 30), for example, a 2 Kbyte portion, the process is not nearly as simple. In this case, the entire sector 30 is read by host 14a, and the CRC algorithm is applied to both the requested portion as well as the remainder portion. The two results are added together and then compared to the previously calculated and stored CRC result 34. Thus, the processing time needed to determine whether an error has occurred with any portion of the 4 Kbyte sector 30 is in fact, longer than that required to determine whether an error has occurred with the entire 4 Kbyte sector 30.